package dang.action.order;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import dang.action.DangAction;
import dang.action.cart.Cart;
import dang.action.cart.CartItem;
import dang.common.Constant;
import dang.common.CookieUtil;
import dang.dao.DaoFactory;
import dang.dao.OrderDao;
import dang.entity.Item;
import dang.entity.Order;
import dang.entity.User;
import dang.exception.DangException;

public class SaveOrderAction extends DangAction{
	public String execute() throws UnsupportedEncodingException, DangException {
		User user = (User) session.get("user");
		int userId= user.getId();
		List<CartItem> catItems=new ArrayList<CartItem>();
		Cart cart = (Cart) session.get("cart");
		if(cart!=null){
			catItems=cart.list();
		}else{
			cart=new Cart();
			String cartInfoId=(String) session.get("cartInfoId").toString();
			String cartInfo=CookieUtil.getCookie("cartInfo"+cartInfoId,request);
			catItems=cart.load(cartInfo);
		}
		double totalPrice=0;
		Set<Item> items=new HashSet<Item>();
		for (CartItem cartItem : catItems) {
			totalPrice+=cartItem.getQty()*cartItem.getProduct().getDang_price()*(cartItem.getProduct().isDeleted()?0:1);
			
			Item item=new Item();
			item.setProduct_id(cartItem.getProduct().getId());
			item.setProduct_name(cartItem.getProduct().getProduct_name());
			item.setDang_price(cartItem.getProduct().getDang_price());
			item.setProduct_num(cartItem.getQty());
			item.setAmount(cartItem.getQty()*cartItem.getProduct().getDang_price());
			items.add(item);
			
		}
		
		//不能使用更新User的方式保存Order，不关Session，有两个Session不能保存
		//关Session的方式，从servlet Session中取出的User不能懒加载获取到User的Order的集合
		
		Order order = new Order();
		order.setUser_id(userId);
		order.setTotal_price(totalPrice);
		order.setItems(items);
		order.setStatus(Constant.ORDER_NEW);
		
		OrderDao dao = DaoFactory.getOrderDao();
		dao.saveOrder(order);
		
//		Set<Order> orders=new HashSet<Order>();
//		user.setOrders(orders);
//		UserDao dao = DaoFactory.getUserDao();
//		dao.update(user);
		
		return "success";
	}
}
